package gmwxapplet

import (
	"github.com/gin-gonic/gin"
	"yundian/internel/app/dao"
	"yundian/internel/app/helper/request"
	"yundian/internel/app/logic"
	"yundian/internel/app/models/couponinfo"
	"yundian/internel/app/models/orders"
	"yundian/internel/pkg/dingo"
	. "yundian/internel/pkg/dingo/result"
)

// ------------微信支付分相关请求处理--------------- //

// HandlePayScoreOrder   微信支付分订单创建 - 请求处理
func HandlePayScoreOrder(ctx *gin.Context) {
	// 请求参数处理
	param := &request.CreateOrderReq{}
	dingo.ErrorIf(ctx.ShouldBindJSON(param)).Unwrap()

	if param.Openid == "" || param.DeviceSn == "" {
		Response(ctx)("参数错误,请重新扫码", CodeError, nil)(OK)
		return
	}

	// 验证是否是黑名单 - 废弃由登录的用户状态来判断
	//if b := helper.CheckOpenidStatus(param.Openid); b { // 100006
	//	Response(ctx)("CodeInvalidOpenid", CodeInvalidOpenid, nil)(OK)
	//	return
	//}

	// 判断是否有订单
	orderInfo := dao.NewOrderDao().GetOrderInfoByOpenidAndSn(param.Openid, param.DeviceSn).Unwrap().(*orders.OrderModel)
	if orderInfo.State == 2 { // 100007
		Response(ctx)("CodeOrderExits", CodeOrderExits, orderInfo)(OK)
		return
	}

	// 创建支付分订单
	respData, err := logic.NewWxOrderLogic().ServiceOrderCreate(param)
	if err != nil {
		Response(ctx)(respData.Get("message"), CodeError, respData)(OK)
		return
	}

	// 使用指定优惠券
	tradeNo := respData.Get("trade_no")
	if dao.NewCouponDao().SetUnderCouponInfo(&couponinfo.CouponInfo{TradeNo: tradeNo, Id: param.CouponInfoId, Status: 1}).Err != nil {
		Response(ctx)(err.Error(), CodeError, respData)(Error)
		return
	}

	Response(ctx)("", CodeSuccess, respData.ToJson())(OK)
}

// HandlePayscoreComplete 微信支付分订单完结 - 请求处理
//func HandlePayscoreComplete(ctx *gin.Context)  {
//	payScoreLogic := logic.NewWxPayScoreLogic()
//	param := &request.GetTradeOrDeviceReq{}
//	dingo.ErrorIf(ctx.ShouldBindJSON(param)).Unwrap()
//
//	apiData := payScoreLogic.OrderCompleteApiData(param)
//
//	respData,err := wechatpay.ApiCompletePayScoreOrder(apiData, param.TradeNo)
//	if err != nil {
//		Response(ctx)(respData.Get("message"), CodeError, respData)(OK)
//		return
//	}
//
//	timeRange := &struct {
//		StartTime string   `json:"start_time"`
//		EndTime   string   `json:"end_time"`
//	}{}
//	_ = json.Unmarshal([]byte(respData.Get("time_range")), timeRange)
//	useTime := wechatpay.ConvIntTime(timeRange.EndTime) - wechatpay.ConvIntTime(timeRange.StartTime)
//	settMoney,_ := strconv.ParseInt(respData.Get("total_amount"), 10, 64)
//	refResult := &resphelper.SettlementResp{
//		UseTime:     useTime,
//		SettMoney:   settMoney,
//		ReturnMoney: 0,
//	}
//
//	// 订单结算成功日志
//	//dingo.Task(payScoreLogic.InsertSettLog, func() {}, respData, refResult, 1)
//
//	// 计算分成 - 异步调用
//	dingo.Task(payScoreLogic.BonusCal, func() {}, settMoney)
//
//	// 修改订单状态 - 异步调用
//	dingo.Task(payScoreLogic.UpdateOrderInfo, func() {}, refResult)
//
//	// 修改设备信息 - 异步调用
//	dingo.Task(payScoreLogic.UpdateDeviceInfo, func() {})
//
//	// 删除redis中的相关信息
//	dingo.Task(payScoreLogic.DelRedisOrderInfo, func() {})
//
//	Response(ctx)("", CodeSuccess, refResult)(OK)
//}

// 关闭订单未入库时的测试关闭
//func HandlePayscoreCompleteTest(ctx *gin.Context)  {
//	param := &request.GetTradeOrDeviceReq{}
//	dingo.ErrorIf(ctx.ShouldBindJSON(param)).Unwrap()
//
//	apiData := logic.NewWxPayScoreLogic().OrderCompleteTest(param)
//	respData,err := wechatpay.ApiCompletePayScoreOrder(apiData, param.TradeNo)
//	if err != nil {
//		Response(ctx)(respData.Get("message"), CodeError, respData)(OK)
//		return
//	}
//	timeRange := &struct {
//		StartTime string   `json:"start_time"`
//		EndTime   string   `json:"end_time"`
//	}{}
//	_ = json.Unmarshal([]byte(respData.Get("time_range")), timeRange)
//	useTime := wechatpay.ConvIntTime(timeRange.EndTime) - wechatpay.ConvIntTime(timeRange.StartTime)
//	settMoney,_ := strconv.ParseInt(respData.Get("total_amount"), 10, 64)
//
//	// 订单结算成功日志
//
//	// 计算分成 - 异步调用
//
//	// 修改订单状态 - 异步调用
//
//	// 修改设备信息 - 异步调用
//
//	// 删除redis中的相关信息
//	Response(ctx)("", CodeSuccess, &resphelper.SettlementResp{
//		UseTime:     useTime,
//		SettMoney:   settMoney,
//		ReturnMoney: 0,
//	})(OK)
//}

// HandlePayScoreSync     微信支付分订单同步 - 请求处理
//func HandlePayScoreSync(ctx *gin.Context)  {
//	param := &request.GetTradeOrDeviceReq{}
//	dingo.ErrorIf(ctx.ShouldBindJSON(param)).Unwrap()
//
//	logic.NewWxPayScoreLogic().OrderSyncApiData(param)
//
//	//respData,err := wechatpay.ApiSyncPayScoreOrder(apiData, param.TradeNo)
//	//if err != nil {
//	//	Response(ctx)(respData.Get("message"), CodeError, respData)(OK)
//	//	return
//	//}
//	//Response(ctx)("", CodeSuccess, respData)(OK)
//}
